package Operator

import (
	"reflect"
)

type Struct interface {
	CopyStruct(src, dst interface{})
}

type Json struct {
}

func (this *Json) CopyStruct(src, dst interface{}) {
	//aj, _ := json.Marshal(src)
	//b := new(dst)
	//_ = json.Unmarshal(aj, b)

}

type Reflect struct {
}

func (this *Reflect) CopyStruct(src, dst interface{}) {
	sval := reflect.ValueOf(src).Elem()
	dval := reflect.ValueOf(dst).Elem()

	for i := 0; i < sval.NumField(); i++ {
		value := sval.Field(i)
		name := sval.Type().Field(i).Name

		dvalue := dval.FieldByName(name)
		if dvalue.IsValid() == false {
			continue
		}
		dvalue.Set(value) //这里默认共同成员的类型一样，否则这个地方可能导致 panic，需要简单修改一下。
	}
}
